// package com->alibaba->druid->sql->ast->statement;

// import com->alibaba->druid->sql->ast->SQLExpr*;
// import com->alibaba->druid->sql->ast->SQLObjectImpl;
// import com->alibaba->druid->sql->ast->SQLReplaceable;
// import com->alibaba->druid->sql->visitor->SQLASTVisitor;
#pragma once

#include <string>
#include <list>

#include "../SQLExpr.h"
#include "../SQLExprImpl.h"
#include "../Object.h"
#include "../SQLName.h"
#include "../SQLObjectImpl.h"
#include "../SQLReplaceable.h"

class SQLASTVisitor;

class SQLTableSampling : virtual public SQLObjectImpl, virtual public SQLReplaceable
{
public:
  SQLExpr_ptr bucket;
  SQLExpr_ptr outOf;
  SQLExpr_ptr on;
  SQLExpr_ptr percent;
  SQLExpr_ptr rows;
  SQLExpr_ptr byteLength;

  BOOL_ptr bernoulli;
  BOOL_ptr system;

  SQLTableSampling();
  SHAREDOBJECT(SQLTableSampling);

  // SQLTableSampling* clone() ;
  virtual SQLObject_ptr clone();
  SQLExpr_ptr getBucket();

  void setBucket(SQLExpr_ptr x);

  SQLExpr_ptr getOutOf();

  void setOutOf(SQLExpr_ptr x);

  SQLExpr_ptr getOn();

  void setOn(SQLExpr_ptr x);

  SQLExpr_ptr getPercent();

  void setPercent(SQLExpr_ptr x);

  void accept0(SQLASTVisitor_ptr v) override;

  BOOL_ptr replace(SQLExpr_ptr expr, SQLExpr_ptr target);

  SQLExpr_ptr getByteLength();

  void setByteLength(SQLExpr_ptr x);

  SQLExpr_ptr getRows();

  void setRows(SQLExpr_ptr x);

  BOOL_ptr isBernoulli();

  void setBernoulli(BOOL_ptr bernoulli);

  BOOL_ptr isSystem();

  void setSystem(BOOL_ptr system);
};
